/*
  登录路由模块
*/
const express = require('express')
const path = require('path')
const utility = require('utility')
const jwt = require('jsonwebtoken')
const router = express.Router()
const db = require(path.join(__dirname, '../common/db.js'))

// 登录用户
router.post('/login', async (req, res) => {
  // 1、获取客户端传递的参数
  let params = req.body
  // 2、对密码进行加密处理
  params.password = utility.md5(params.password)
  // 3、查询数据库（根据用户名和加密后的密码）
  let sql = 'select id from user where username = ? and password = ?'
  let ret = await db.operateData(sql, [params.username, params.password])
  
  if (ret && ret.length > 0) {
    // 登录成功,生成该用户的token信息(token中可以携带数据:用户名和id)
    let salt = 'bigevent'
    // jwt.sign方法的参数：
    // 1、参数一表示添加到token中的数据，可以反解
    // 2、参数二表示加密干扰字符串
    // 3、参数三表示token的有效期
    let token = jwt.sign({
      username: params.username,
      id: ret[0].id
    }, salt, {
      expiresIn: '1h'
    })
    res.json({
      status: 0,
      message: '登录成功',
      token: 'Bearer ' + token
    })
  } else {
    // 登录失败
    res.json({
      status: 1,
      message: '登录失败'
    })
  }
})

// 注册用户
router.post('/reguser', async (req, res) => {
  let sql = 'insert into user set ?'
  // 前端传递的参数
  // md5加密是单向的，无法通过密码进行反解
  let params = {
    username: req.body.username,
    password: utility.md5(req.body.password)
  }
  // 插入数据库
  let ret = await db.operateData(sql, params)
  // 返回状态
  if (ret && ret.affectedRows > 0) {
    // 注册用户成功
    res.json({
      status: 0,
      message: '注册成功'
    })
  } else {
    res.json({
      status: 1,
      message: '注册失败'
    })
  }
})

module.exports = router